package studio7.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import studio7.dao.BaseDAO;

import studio7.exception.DAOException;
import studio7.modelo.Local;
import studio7.modelo.Sala;
import studio7.modelo.Servicio;
import studio7.util.ConexionBD;

public class ServicioDAO extends BaseDAO{
	public Collection<Servicio> buscarPorNombre(String nombre) throws DAOException {
		System.out.println("ServicioDAO: buscarPorNombre(String nombre)");
		String query = "SELECT idServicio, nombre, costoHora, estado FROM servicio";
		Collection<Servicio> lista = new ArrayList<Servicio>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + nombre + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				Servicio ss7 = new Servicio();
	
				ss7.setIdServicio(0);
				ss7.setNombreServicio("nombreServicio");
				ss7.setCostoHora(ss7.getCostoHora());
				ss7.setEstado(ss7.getEstado());
				
	
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOException(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}

	
public void insertar(Servicio ss7) throws DAOException {
		System.out.println("ServicioDAO: insertar(Servicio vo)");
		String query = "INSERT INTO servicio(nombre, costoHora, estadoServicio ) VALUES (?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setString(1, ss7.getNombreServicio());
			stmt.setDouble(2, ss7.getCostoHora());
			stmt.setInt(3, ss7.getEstado());
	
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar el servicio");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOException(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

// se creo para la historia 07 para saber si inserto o no como boolean
public boolean insertServicio(Servicio ss7) throws DAOException {
	
	String query = "INSERT INTO servicio(nombre, costoHora, estadoServicio ) VALUES (?,?,?)";
	Connection con = null;
	PreparedStatement stmt = null;
	int i =0;
	try {
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		
		stmt.setString(1, ss7.getNombreServicio());
		stmt.setDouble(2, ss7.getCostoHora());
		stmt.setInt(3, ss7.getEstado());

		
		i = stmt.executeUpdate();
		if (i != 1) {
			throw new SQLException("No se pudo insertar el servicio");
		}
	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOException(e.getMessage());
	} finally {
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
	if (i<1){
        return false;
    }else{
        return true;
    }
}

//se creo para la historia 07 para verificar si existe el servicio
public boolean existeServicio(String nombre) throws DAOException{
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	int nTotal = 0;
	boolean bExiste = false;
	try {
        String query = "SELECT COUNT(*) AS TOTAL FROM servicio WHERE nombre = ? ";
        
        con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		
		stmt.setString(1, nombre);
					
        rs = stmt.executeQuery();
        
        if(rs.next()){
        	nTotal = rs.getInt(1);
        	if(nTotal>0){            		
        		bExiste = true;
        	}
        }
        this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}catch(SQLException e){			
		System.err.println(e.getMessage());
		throw new DAOException(e.getMessage());
    } finally{
    	this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
    
    return bExiste;
}


	public Sala obtener(String idServicio) throws DAOException {
		System.out.println("SalaDAO: obtener(String nombre)");
		Sala vo = new Sala();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idServicio, nombre, costoHora, estado  from servicio where idServicio=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, idServicio);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdSala(rs.getInt(1));
				vo.setNombreSala(rs.getString(2));
				vo.setCapacidadSala(rs.getInt(3));
				vo.setCaracteristicasSala(rs.getString(4));
				vo.setCostoSala(rs.getDouble(5));
			
			    Local l= new Local();
				l.setCodigoLocal(rs.getInt(6));
				vo.setLocal(l);	
			    
			    
			    
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOException(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	public void eliminar(String idServicio) throws DAOException {
		System.out.println("ServicioDAO: eliminar(String idServicio)");
		String query = "DELETE FROM servicio WHERE idServicio=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,idServicio);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar el servicio indicado");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOException(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public void actualizar(Servicio ss7) throws DAOException {
		System.out.println("ServicioDAO: actualizar(Servicio ss7)");
		String query = "update servicio set nombre, costoHora, estado where Idervicio=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			
			stmt.setString(1, ss7.getNombreServicio());
			stmt.setDouble(2, ss7.getCostoHora());
			stmt.setInt(3, ss7.getEstado());
		
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar el servicio");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOException(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	
public Collection<Servicio> listar() throws DAOException {
		System.out.println("ServicioDAO: listar()");
		Collection<Servicio> listaServicios = new ArrayList<Servicio>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT idServicio, nombre, costoHora, estado from servicio";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Servicio ss7 = new Servicio();
				ss7.setIdServicio(rs.getInt(1));
				ss7.setNombreServicio(rs.getString("nombre"));
				ss7.setCostoHora(rs.getDouble(3));
			    ss7.setEstado(rs.getInt(4));
				    		
			    listaServicios.add(ss7);
						
				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOException(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return listaServicios;
	}

public String  BuscarServicio(int idServicio) throws DAOException {
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	String nombreServicio="";
	try {
		con = ConexionBD.obtenerConexion();
		String query = "SELECT nombre  from servicio where idServicio=?";
		stmt = con.prepareStatement(query);
		stmt.setInt(1,idServicio);
		rs = stmt.executeQuery();
		
		while (rs.next()) {
			nombreServicio=rs.getString(1);
			
		}
	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOException(e.getMessage());
	} finally {
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
	return nombreServicio;
}
public int  BuscarServicioId(String nombreServicio) throws DAOException {
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	int idServicio=0;
	try {
		con = ConexionBD.obtenerConexion();
		String query = "SELECT idServicio  from servicio where nombre=?";
		stmt = con.prepareStatement(query);
		stmt.setString(1,nombreServicio);
		rs = stmt.executeQuery();
		
		while (rs.next()) {
			idServicio=rs.getInt(1);
			
		}
	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOException(e.getMessage());
	} finally {
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
	return idServicio;
}
//PARA LISTAR LOS SERVICIOS DEL ARMADO DE SALA - GIULIANA
	public Collection<Servicio> listar2() throws DAOException {
		System.out.println("ServicioDAO: listar()");
		Collection<Servicio> listaServicios = new ArrayList<Servicio>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT idServicio, nombre from servicio";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Servicio ss7 = new Servicio();
				ss7.setIdServicio(rs.getInt(1));
				ss7.setNombreServicio(rs.getString(2));				    		
			    listaServicios.add(ss7);
						
				
			}
			System.out.println("Registros encontrados: " + listaServicios.size());
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOException(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return listaServicios;
}
}
